/*
 * File:   BombermanTest.cpp
 * Author: jaschu
 *
 * Created on 28-may-2014, 1:23:16
 */

#include "BombermanTest.h"
#include "../server_Bomberman.h"
#include "../server_IOcupante.h"
#include "../server_ZombieRojo.h"
#include "../server_Configuracion.h"
#include <iostream>

using std::cout;
using std::endl;


CPPUNIT_TEST_SUITE_REGISTRATION(BombermanTest);

BombermanTest::BombermanTest() {
}

BombermanTest::~BombermanTest() {
}

void BombermanTest::setUp() {
    Configuracion::newConfiguracion();
    Configuracion::setAlcanceBomba(5);
    Configuracion::setTiempoDetonacionBomba(1);
    Configuracion::setTiempoRegeneracionBomba(3);
    Coordenada c = Coordenada(0,0);
    Bomberman bomberman(c);
}

void BombermanTest::tearDown() {
}

void BombermanTest::testColocarBomba() {
    BombaBomberman* nuevaBomba = bomberman.colocarBomba();
    CPPUNIT_ASSERT(nuevaBomba);
}


void BombermanTest::testColisionarConBombaPlanta() {
    Coordenada coord = Coordenada(1,1);
    Bomberman bomberman = Bomberman(coord);
    int vidas = bomberman.getVidasRestantes();
    CPPUNIT_ASSERT(vidas == 3);
    
    bomberman.recibirExplosion();
    vidas = bomberman.getVidasRestantes();
    CPPUNIT_ASSERT(vidas == 2);
    
    bomberman.recibirExplosion();
    vidas = bomberman.getVidasRestantes();
    CPPUNIT_ASSERT(vidas == 1);
    
    bomberman.recibirExplosion();
    vidas = bomberman.getVidasRestantes();
    CPPUNIT_ASSERT(vidas == 0);
    
    CPPUNIT_ASSERT(!bomberman.estaVivo());

}

void BombermanTest::testColisionarConZombie() {
    bomberman.colisionarConZombie();
    if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
    }
}

void BombermanTest::testColisionarCon() {
    Mapa mapa = Mapa(10);
    mapa.inicializar();
    Coordenada coordBomberman = Coordenada(0,0);
    bomberman = Bomberman(coordBomberman);
    bomberman.setDireccion("arriba");
    mapa.ubicarElemento(&bomberman, coordBomberman);
    ZombieRojo zombie = ZombieRojo();
    Coordenada coord = Coordenada(0,4);
    zombie.ubicar(coord);
    mapa.ubicarElemento(&zombie, coord);
    int i = 0;
    while (!mapa.hayColision(coord)) {
        mapa.moverElemento(&bomberman);
        bomberman.setDireccion("arriba");
        i++;
    }
    mapa.resolverColisiones(&bomberman);

    CPPUNIT_ASSERT(i == 4);
    CPPUNIT_ASSERT(bomberman.getVidasRestantes() == 2);

}

void BombermanTest::testGetVidasRestantes() {
    //Bomberman bomberman;
   // int result = bomberman.getVidasRestantes();
    if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
    }
}

void BombermanTest::testResetVidas() {
    Bomberman bomberman;
    bomberman.resetVidas();
    if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
    }
}

